package com.kele.base.core;


import com.kele.base.BasePage;
import com.kele.base.bo.BaseBO;
import com.kele.base.entity.BaseEntity;
import org.springframework.data.domain.Page;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

public interface BaseService<T extends BaseEntity<ID>, ID extends Serializable, BO extends BaseBO<ID>, VO> {

    /**
     * 根据Id获取实体信息
     *
     * @param id 主键
     * @return 实体信息
     */
    T getById(ID id);

    /**
     * 根据Id获取VO信息
     *
     * @param id 主键
     * @return VO信息
     */
    VO getVoById(ID id);

    /**
     * 分页查询VO信息
     * @param bo
     * @param pageQuery
     * @return
     */
    Page<VO> getPageVO(BO bo, BasePage pageQuery);

    /**
     * 添加实体信息
     *
     * @param entity 实体信息
     * @return 主键
     */
    ID add(BO entity);

    /**
     * 批量添加
     *
     * @param entityList 实体列表
     */
    void addBatch(List<BO> entityList);

    /**
     * 根据id修改实体信息
     *
     * @param entity 实体信息
     * @return 主键
     */
    ID edit(BO entity);

    /**
     * 根据id批量更新
     *
     * @param entityList 实体列表
     */
    void editBatchById(List<BO> entityList);

    /**
     * 根据 id 删除单个实体
     *
     * @param id 主键
     */
    void delete(ID id);

    /**
     * 根据 id 集合批量删除实体
     *
     * @param idCollection id集合
     */
    void delete(Collection<ID> idCollection);
}
